package com.fsserver.core.service;

import com.fsserver.core.dto.PaymentRequestDTO;
import com.fsserver.core.vo.PaymentResponseVO;
import com.fsserver.core.vo.RequestNotification;

import java.util.Map;

public interface WechatPayService {
    
    /**
     * 统一支付接口
     * 根据支付类型选择不同的支付方式：
     * - JSAPI: 用于小程序、公众号支付
     * - MICRO: 用于付款码支付
     * - H5: 用于H5支付
     * - NATIVE: 用于扫码支付
     * - APP: 用于APP支付
     * 
     * @param requestDTO 支付请求DTO
     * @return 支付响应VO
     */
    PaymentResponseVO createPayment(PaymentRequestDTO requestDTO);

    /**
     * 查询订单
     *
     * @param orderNo 订单号
     * @return 查询结果
     */
    Map<String, Object> queryOrder(String orderNo);

    /**
     * 关闭订单
     *
     * @param orderNo 订单号
     * @return 操作结果
     */
    boolean closeOrder(String orderNo);

    /**
     * 申请退款
     *
     * @param orderNo 订单号
     * @param refundNo 退款单号
     * @param totalAmount 订单总金额（单位：分）
     * @param refundAmount 退款金额（单位：分）
     * @param reason 退款原因
     * @return 退款结果
     */
    Map<String, Object> refund(String orderNo, String refundNo, Long totalAmount, Long refundAmount, String reason);

    /**
     * 查询退款
     *
     * @param refundNo 退款单号
     * @return 查询结果
     */
    Map<String, Object> queryRefund(String refundNo);

    /**
     * 处理支付结果通知
     *
     * @param notification 通知对象
     * @return 处理结果
     */
    boolean handlePaymentNotification(RequestNotification notification);

    /**
     * 处理退款结果通知
     *
     * @param notification 通知对象
     * @return 处理结果
     */
    boolean handleRefundNotification(RequestNotification notification);
} 